import jieba
from wordcloud import WordCloud
from matplotlib import pyplot as plt

# 读取报告文本，根据实验环境修改文件地址
file_name = 'cpc_resolution/data/resolution.txt'
with open(file_name, encoding='utf-8') as file:
    resolution_text = file.read()

# lcut: (*args, **kwargs) -> list
key_words = jieba.lcut(resolution_text)

# 常见的中文标点符号
punctuation = ['，', '、', '；', '。', '“', '”', '（', '）', '《', '》', '！']
# list()转换列表
# punctuation = list('，、；。“”（）《》！')

# 删除标点符号以及单个字符
# 方法1:pop()按序从最后一个元素往前删除
i = len(key_words) - 1
while i >= 0:
    if key_words[i] in punctuation or len(key_words[i]) == 1:
        # pop()
        key_words.pop(i)

        # del
        # del key_words[i]
    i -= 1

# 方法2:remove()按值迭代删除
# 统计标点符号出现的次数，pun_count=[['!',10],['《',8],……]
# dup_keyword = key_words.copy()
# pun_count = []
# for pun in punctuation:
#     pun_count.append([pun,dup_keyword.count(pun)])

# for item in pun_count:
#     pun = item[0]
#     count = item[1]
#     # pun,count = item[0],item[1]
#     for i in range(count):
#         dup_keyword.remove(pun)


# 1)去除列表中的重复关键词
keyword_std = []
for word in key_words:
    if word not in keyword_std:
        keyword_std.append(word)


# 2)统计每个关键词出现的次数
# 为了便于后面的排序，把出现次数放在子列表的第一个位置
# [[207, '发展'], [187, '中国'], [168, '人民']]

word_count = list()
for word in keyword_std:
    # 方法1：采用嵌套列表
    word_count.append([key_words.count(word), word])
    # 方法2：使用元组
    # [(207, '发展'), (187, '中国'), (168, '人民')]
    # word_count.append((key_words.count(word), word))

# 原始的关键词列表和去重关键词列表不再使用，可以释放掉资源
del key_words, keyword_std

# 3)对列表按逆序从大到小排序
# 方法1：sort物理逆序排序
word_count.sort(reverse=True)
# 方法2：逻辑排序
# word_count = sorted(word_count,reverse=True)

# 4)截取高频出现的前20个关键词
# 词云图只需要关键词，不需要出现次数值
# ['发展', '中国', '人民', '坚持', '社会主义']

# 使用列表推导式
# 列表的切片操作，取前20个高频词
kw_list = [word for count, word in word_count[0:20]]

# 5)创建词云图
# 不支持中文，需要指定字体
font = r'C:\Windows\Fonts\Deng.ttf'
word_cloud = WordCloud(background_color='white',
                       width=600,
                       height=400,
                       font_path=font)

# 空格字符隔开的关键词字符串
# '发展 中国 人民 坚持 社会主义'
word_cloud.generate_from_text(' '.join(kw_list))

# 显示词云图片
plt.imshow(word_cloud)

# 或者导出图片文件后再预览
# word_cloud.to_file("achievement.png")

# 不显示坐标轴
plt.axis('off')
plt.show()
